package dao;

import java.util.List;

import org.hibernate.JDBCException;
import org.hibernate.Query;
import org.hibernate.Session;

import dao.utils.GenericHibernateDAO;
import domain.Proveedor;

public class ProveedorDAOImpl extends GenericHibernateDAO implements
		ProveedorDAO {

	public ProveedorDAOImpl(Session s) {
		super(s);
	}

	@SuppressWarnings("unchecked")
	public List<Proveedor> findAll() {
		Query q = getSession().createQuery("From Proveedor");
		return q.list();
	}

	public boolean deleteProov(Proveedor proov) {
//		Query q = getSession().createQuery("from Compra as comp where comp.proveedor.idProveedor = ?")
//				.setInteger(0, proov.getIdProveedor());
//		Long numProov = (Long) q.uniqueResult();
//		if (numProov == null) {
//			System.out.println("No tiene en compras");
//			Query p = getSession().createQuery("from Articulos as art where art.proveedor.idProveedor = ?")
//					.setInteger(0, proov.getIdProveedor());
//			Long numProov2 = (Long) q.uniqueResult();
//			if (numProov2 == null) {
//				System.out.println("No tiene en articulos");
				try {
					getSession().delete(proov);
					return true;
				} catch (JDBCException e) {
					if(e.getSQLState().equalsIgnoreCase("23000")){
						System.out.println("Falla aqui");
					}
					System.out.println("Falla fuera");
					return false;
				}
//			} else {
//				return false;
//			}
//		} else {
//			return false;
//		}
	}

	public boolean guardarProveedor(String nombre, Proveedor proveedor) {
		Proveedor prov = (Proveedor) getSession()
				.createQuery("from Proveedor as pro where pro.nombre = ?")
				.setString(0, nombre).uniqueResult();
		if (prov != null) {
			return false;
		} else {
			getSession().save(proveedor);
			return true;
		}
	}

	@Override
	public List<Proveedor> findName(String nameprov) {
		// TODO Auto-generated method stub
		Query q= getSession().createQuery("FROM Proveedor WHERE NOMBRE ="+"'"+nameprov+"'");
		return q.list();
	}

	@Override
	public List<Proveedor> findByID(String id) {
		Query q= getSession().createQuery("FROM Proveedor WHERE idProveedor ="+id);
		return q.list();
	}

	public boolean modificaProveedor(Proveedor proveedor) {
		getSession().merge(proveedor);
		return true;
	}
}
